﻿// 3635. 二元组整数.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <algorithm>
#include <string>
#include <vector>
#include <set>
using namespace std;
/*
https://www.acwing.com/problem/content/3638/


给定 N个整数，每次从中挑选两个整数构成一个二元组，请问共可以构成多少个不同的二元组？

将所有不同的二元组按照字典顺序输出。

输入格式
第一行，一个整数 N。

第二行包含 N个整数。

输出格式
将所有不同的二元组按照字典顺序输出。

每行输出一个二元组，输出格式为 (a,b)。

数据范围
2≤N≤30
,
输入整数取值范围 [1,100]。

输入样例：
3
1 2 3
输出样例：
(1,2)
(1,3)
(2,1)
(2,3)
(3,1)
(3,2)
*/

const int N = 35;
int a[N];
int n;

set<vector<int>> ss;

int main()
{
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> a[i];
	}

	sort(a, a + n);

	for (int i = 0; i < n; i++) {
		for (int j = i + 1; j < n; j++) {
			ss.insert({a[i],a[j]}); ss.insert({ a[j],a[i] });
		}
	}

	for (auto e : ss) {
		cout << "(" << e[0] << "," << e[1] << ")" << endl;
	}


}
 